/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.emp.solbrillante.sales.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.ArrayList;
import pe.emp.solbrillante.sales.bean.Detalle_pedido;
import pe.emp.solbrillante.sales.bean.Pedido;

/**
 *
 * @author Ronald
 */
public class MySQLPedidoDAO implements PedidoDAO{
    
          //coneccion ala base de datos
      String connectionUrl = "jdbc:mysql://localhost/prueba_entidadr?" +
                                   "user=adminsamaydev&password=123456";
      

    @Override
    public ArrayList<Detalle_pedido> queryListaDetalle(Pedido p) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int insert(Pedido p) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int queryInsertaCompraPaquete(float total, String estado) {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;            
            String calling;
            
        try {
            
             java.util.Date momentoDate = new java.util.Date();
        java.sql.Timestamp momentoTimestamp = new java.sql.Timestamp(momentoDate.getTime());
//        String fecha_actual = new java.text.SimpleDateFormat("dd/MM/yyyy").format(momentoTimestamp);
//        this.jTextFieldFechaActual.setText(fecha_actual)
            //1. Se registra el driver de la BD      
            Driver myDriver = new com.mysql.jdbc.Driver();            
            //2. Se abre la conexión     
            conn = DriverManager.getConnection(connectionUrl);            
            //3. Se ejecuta la sentencia SQL      
            
            //int idNuevoPedidoGenerado = 0;
            //calling = "{call prueba_entidadr.sp_inserta_pedido("+total+",'"+estado+"',"+idNuevoPedidoGenerado+")}";            
            calling = "{call prueba_entidadr.sp_inserta_pedido(?,?,?,?)}";            
            System.out.print("QUERY:" + calling);
            
//           // pstmt = conn.prepareStatement(calling);            
            CallableStatement cs = conn.prepareCall(calling);
            
            cs.setFloat(1, total);
            cs.setString(2, estado);
            cs.registerOutParameter(3, Types.INTEGER);            
            cs.setTimestamp(4, momentoTimestamp);
//            cs.registerOutParameter(3, java.sql.Types.NUMERIC);  
            System.out.println("paso setPAr");
            rs =  cs.executeQuery();
//          rs = pstmt.executeQuery();
//          //4. Se evalúan los resultados
//          //System.out.print("PASA!!:");
            System.out.println("executeQuery()");
            
            return cs.getInt(3);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 

           return 0; 
    }

    
    @Override
    public ArrayList<Object> queryListaPedidos() {      
         
            ArrayList<Object> tabla   = new ArrayList<Object>();        
                
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            String calling;
 
            try {
                //1. Se registra el driver de la BD
                Driver myDriver = new com.mysql.jdbc.Driver();
                //2. Se abre la conexión
            
                conn = DriverManager.getConnection(connectionUrl);

                //3. Se ejecuta la sentencia SQL  
                
            //3. Se ejecuta la sentencia SQL
               calling = "{call prueba_entidadr.sp_get_listapedidos()}";
               pstmt = conn.prepareStatement(calling);
               rs =  pstmt.executeQuery();
//            SELECT ped.idpedido as pedido			
//			,prv.nombre as proveedor
//			,t_ped.detalle as tipo_pedido
//			,ped.estado_pedido as estado
//			,ped.total as total
//			,ped.fecha_registro as fecha_reg
//			,ped.fecha_cierre as fecha_cie
//			FROM prueba_entidadr.pedido ped,
//            prueba_entidadr.tipo_pedido t_ped,
//            prueba_entidadr.proveedor prv,
//            prueba_entidadr.paquete paq,
//			prueba_entidadr.producto prod
//			where ped.idtipo_pedido_fk= t_ped.idtipo_pedido
//            and prv.idproveedor = prod.idproveedor_fk
//			and prod.idproducto = paq.idproducto_fk
//            and paq.idpaquete = (select max(detp.idpaquete_fk)
//					from prueba_entidadr.detalle_pedido detp
//					where detp.idpedido_det_fk=ped.idpedido);


                //4. Se evalúan los resultados
               while (rs.next()){                
                   
                int id = rs.getInt("pedido");
                String proveedor = rs.getString("proveedor");
                String tipo_pedido = rs.getString("tipo_pedido");//
                String estado = rs.getString("estado");
                Double total = rs.getDouble("total");
                Timestamp fecha_reg = rs.getTimestamp("fecha_reg");
                Timestamp fecha_cie = rs.getTimestamp("fecha_cie");
                
                
                Object[] fila = new Object[7];
                                  
                                  fila[0] = id;                                  
                                  fila[1] = proveedor;                                  
                                  fila[2] = tipo_pedido;
                                  fila[3] = fecha_reg;
                                  fila[4] = fecha_cie; 
                                  fila[5] = total; 
                                  fila[6] = estado;                                  
                                  
                         tabla.add(fila);
                   
                       }

            } catch(Exception e){
                e.printStackTrace();
            }   finally {
                try { if (rs!= null) rs.close();}  catch(Exception e) {e.printStackTrace();}
                try { if (pstmt!= null) pstmt.close();}  catch(Exception e) {e.printStackTrace();}
                try { if (conn!= null) conn.close();}  catch(Exception e) {e.printStackTrace();}
            }   
            
            
            
            return tabla;
    }

   @Override
    public int queryUpdateEstadoPedido(int codPedido, String nuevo_estado) {
             Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;            
            String calling;
            
        try {
            
            java.util.Date momentoDate = new java.util.Date();
            java.sql.Timestamp momentoTimestamp = new java.sql.Timestamp(momentoDate.getTime());
            //1. Se registra el driver de la BD
      
            Driver myDriver = new com.mysql.jdbc.Driver();
            
            //2. Se abre la conexión     

            conn = DriverManager.getConnection(connectionUrl);
            
            //3. Se ejecuta la sentencia SQL
            //calling = "{call prueba_entidadr.sp_update_estadoPedido("+codPedido+",'"+nuevo_estado+"')}";
            
            calling = "{call prueba_entidadr.sp_update_estadoPedido(?,?,?)}";            
            System.out.print("QUERY:" + calling);
            
//           // pstmt = conn.prepareStatement(calling);            
            CallableStatement cs = conn.prepareCall(calling);
            
            cs.setInt(1, codPedido);
            cs.setString(2, nuevo_estado);           
            cs.setTimestamp(3, momentoTimestamp);
            System.out.println("CALL: "+calling);
           // pstmt = conn.prepareStatement(calling);            
             rs =  cs.executeQuery();
           // rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 

            return 1;
    }
    
    
    
}
